package com.example.hello.controller;

import com.example.hello.pojo.LoginInfo;
import com.example.hello.pojo.Res;
import com.example.hello.pojo.User;
import com.example.hello.service.LoginService;
import com.example.hello.service.RegistrationService;
import com.example.hello.service.ResetPasswordService;
import com.example.hello.service.SMSService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 用户认证相关接口：短信验证码发送和用户注册
 */
@RestController
@RequestMapping("/auth")
public class AuthController {

    @Autowired
    private SMSService smsService;

    @Autowired
    private RegistrationService registrationService;

    @Autowired
    private LoginService loginService;

    @Autowired
    private ResetPasswordService resetPasswordService;

    /**
     * 发送短信验证码接口
     * 请求方式：POST
     * 参数：phone（手机号）
     */
    @PostMapping("/sendCode")
    public Res sendCode(@RequestParam("phone") String phone) {
        boolean sent = smsService.sendSMSCode(phone);
        if (sent) {
            return Res.success();
        } else {
            return Res.error("验证码发送过于频繁，请稍后再试");
        }
    }

    /**
     * 用户注册接口
     * 请求方式：POST
     * 参数：phone（手机号），password（密码），smsCode（短信验证码）
     * 注：密码确认在前端校验，这里只处理一次密码
     */
    @PostMapping("/register")
    public Res register(@RequestParam("phone") String phone,
                        @RequestParam("password") String password,
                        @RequestParam("smsCode") String smsCode) {
        boolean registered = registrationService.registerUser(phone, password, smsCode);
        if (registered) {
            return Res.success();
        } else {
            return Res.error("注册失败，可能是手机号已存在或验证码错误");
        }
    }

    /**
     * 登录接口
     * 请求方式：POST
     * 参数：phone（手机号），password（明文密码）
     * 返回：Res<LoginInfo>，其中 data 为当前登录的用户信息及 token
     */
    @PostMapping("/login")
    public Res login(@RequestParam("phone") String phone,
                     @RequestParam("password") String password) {
        LoginInfo loginInfo = loginService.login(phone, password);
        if (loginInfo != null) {
            return Res.success(loginInfo);
        } else {
            return Res.error("手机号或密码错误");
        }
    }

    /**
     * 找回密码接口
     * 请求方式：POST
     * 参数：phone（手机号）、smsCode（短信验证码）、password（新密码）
     */
    @PostMapping("/forgetPassword")
    public Res resetPassword(@RequestParam("phone") String phone,
                             @RequestParam("smsCode") String smsCode,
                             @RequestParam("password") String password) {
        try {
            boolean success = resetPasswordService.resetPassword(phone, smsCode, password);
            if (success) {
                return Res.success("密码重置成功");
            } else {
                return Res.error("密码重置失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Res.error(e.getMessage());
        }
    }
}